package com.zjsru.oneday202208;


/**
 * @Author: likew
 * @Date: 2022/8/11
 * 重新格式化字符串
 *
 * 输入：s = "a0b1c2"
 * 输出："0a1b2c"
 * 解释："0a1b2c" 中任意两个相邻字符的类型都不同。 "a0b1c2", "0a1b2c", "0c2a1b" 也是满足题目要求的答案。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/reformat-the-string
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Reformat {
    public String reformat(String s) {
        char[] cs = s.toCharArray();
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();
        for (char c:cs) {
            if(c >= 'a'){
                sb1.append(c);
            }else{
                sb2.append(c);
            }
        }
        int n = sb1.length(), m = sb2.length(), tot = n + m;
        if(Math.abs(n - m) > 1) {
            return "";
        }
        StringBuilder sb3 = new StringBuilder();
        while(sb3.length() != tot){
            if(n > m){
                sb3.append(sb1.charAt(--n));
            }else if(m > n){
                sb3.append(sb2.charAt(--m));
            }else{
                if(!sb3.toString().isEmpty() && sb3.charAt(sb3.length() - 1) >= 'a'){
                    sb3.append(sb2.charAt(--m));
                }else{
                    sb3.append(sb1.charAt(--n));
                }
                
            }
        }
        return sb3.toString();
    }
    
    public static void main(String[] args) {
        Reformat reformat = new Reformat();
        String s = "a0b1c2";
        System.out.println(reformat.reformat(s));
    }
}
